import axios from 'axios';
import { ElMessage } from 'element-plus';
import { useUserStore } from '../stores/user'; // 引入 user store

// 创建 axios 实例
const service = axios.create({
    // baseURL 将会预置在所有请求的 URL 前面
    // 注意：这里我们不设置 baseURL，因为我们将使用 Vite 的代理
    // baseURL: 'http://localhost:8081', // 如果不使用代理，则需要取消此行注释
    timeout: 10000, // 请求超时时间
});

// 请求拦截器
service.interceptors.request.use(
    config => {
        // 在发送请求之前做些什么
        const userStore = useUserStore();
        // 检查 store 中是否有 token
        if (userStore.token) {
            // 让每个请求携带自定义 token
            config.headers['Authorization'] = `Bearer ${userStore.token}`;
        }
        return config;
    },
    error => {
        // 对请求错误做些什么
        console.log(error); // for debug
        return Promise.reject(error);
    }
);

// 响应拦截器
service.interceptors.response.use(
    response => {
        // 对响应数据做点什么
        // 后端返回的数据结构通常是 { code: 200, message: '...', data: ... }
        const res = response.data;

        // 如果 code 不是 200，则判断为错误。
        // 这里你需要根据你后端返回的格式来调整
        if (res.code && res.code !== 200) {
            ElMessage({
                message: res.message || 'Error',
                type: 'error',
                duration: 5 * 1000
            });
            return Promise.reject(new Error(res.message || 'Error'));
        } else {
            // 如果后端没有返回 code 字段，或者 code 是 200，则直接返回 data 部分或整个响应
            // 对于登录接口，我们后端直接返回 { token: '...' }，没有 code，所以会走这里
            return res;
        }
    },
    error => {
        // 对响应错误做点什么
        console.log('err' + error); // for debug
        ElMessage({
            message: error.message,
            type: 'error',
            duration: 5 * 1000
        });
        return Promise.reject(error);
    }
);

export default service;